1. Conociendo los datos
1.1 Cargue el paquete tidyverse
library(tidyverse)
── Attaching core tidyverse packages ─────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ───────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
1.2 Lea el archivo death_handwashing.csv usando read_csv y asígnelo
a una variable.
deaths_handwashing <- read_csv("deaths_handwashing.csv")
Rows: 12 Columns: 4
── Column specification ───────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (1): clinic
dbl (3): year, births, deaths
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
1.3 Imprima la variable del inciso 1.2
2 El alarmante número de muertes
La tabla anterior muestra el número de mujeres que dieron a luz
durante los años 1841 a 1846 en una ciudad al noreste de Austria, en dos
clínicas en particular. Notará que dar a luz era muy peligroso; un
número alarmante de mujeres murió como resultado del parto. Vemos esto
con mayor claridad si observamos la proporción de muertes con respecto
al número de mujeres que dieron a luz.
2.1 Use mutate para agregar una nueva columna que se calculará como
la proporción de muertes por número de nacimientos.
2.2 Imprima el dataset con lanueva variable.
3 Muerte en las clínicas
Si ahora graficamos la proporción de muertes en la clínica 1 como en
la clínica 2, veremos un patrón curioso.
3.1 Utilice ggplot para hacer una gráfica lineal. Tome de referencia
la columna creada en el inciso 2.1 (eje) versus la variable year (eje
x).

3.2 Utilice la variable clinic para definir un color distinto en la
estética de la gráfica.

3.3 Por último, imprima la gráfica y exponga su punto de vista.
4 Comienza el lavado de manos
¿Por qué la proporción de muertes es mucho más alta en la Clínica 1?
La única diferencia en ambas clínicas era que muchos estudiantes de
medicina trabajaban en la Clínica 1, mientras que en la Clínica 2 no
había tantos. Otro dato interesante es que los médicos que atendían
partos solo se encargaban de esa función, mientras que los estudiantes
también pasaban tiempo en las salas de autopsias examinando
cadáveres.
Se empezó a sospechar que algo en los cadáveres, propagado de las
manos de los estudiantes de medicina, causaba la enfermedad. Entonces,
en un intento desesperado por detener las altas tasas de mortalidad, se
decretó: ¡Lávese las manos en todo momento!
4.1 Cargue los datos mensuales de la Clínica 1 para ver si el lavado
de manos tuvo algún efecto, para esto lea el archivo deaths_clinic1.csv
y asígnelo a una nueva variable.
deaths_clinic1 <- read_csv("deaths_clinic_1.csv")
Rows: 98 Columns: 3
── Column specification ───────────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
dbl (2): births, deaths
date (1): date
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
4.2 Utilice ggplot para hacer una gráfica lineal. La gráfica tendrá
la característica de ser dual (dos ejes Y). Para el eje X se utilizará
la variable date y para Y1 y Y2, serán births y deaths
respectivamente.

4.3 Utilice la funcion scale_y_continuous para agregar un título a
cada eje Y.

4.4 Agregue un título al eje X y un título general a toda la
gráfica.

4.5 Establezca color verde al comportamiento de la variable births y
naranja para deaths.

4.6 Imprima la gráfica resultante.
Imprimir la grafica con plotly
4.7 Construya una opinión con el resultado de la gráfica.
5 El efecto del lavado de manos. Analicemos la proporción de muertes
a lo largo del tiempo.
Perspectiva lineal ## 5.1 Agregue una nueva columna a la variable
creada en el inciso 4.1. Esta nueva columna se calculará como la
proporción de muertes por número de nacimientos. Guarde este cambio en
una nueva variable.
5.2 Imprima las primeras filas del dataframe del punto anterior.
Haga uso de la función head()
5.3 Elabore una gráfica lineal utilizando la columna creada en el
incico 5.1 (eje y) versus la colunma date (eje x).

5.4 Utilice la funcion labs para dar al eje x y al eje y una
estética a las etiquetas.

5.5 Por último, imprima la gráfica y concluya.
Perspectiva de barras
5.6 Use group_by para la variable year y summarise para encontrar la
media tomando de referencia la variable del inciso 5.1. Guarde el
resultado en una nueva variable.
5.8 Por último, imprima la grafica y concluya.
graficar con plotly
Los resultados del lavado de manos
A partir del año 1847 la proporción de muertes se reduce
drásticamente y, sí, fue entonces cuando se hizo obligatorio el lavado
de manos. El efecto del lavado de manos se hace aún más claro si lo
resaltamos en el gráfico.
6.1 Agregue una columna a la variable creada en el inciso 5.1, está
columna será TRUE a partir del año en que se impuso el lavado de manos y
FALSE para años anteriores. Guarde este cambio en una nueva
variable.
6.2 Construya una gráfica lineal tomando de referencia la variable
con la proporción (muertes/nacimientos) para el eje y versus la variable
date para el eje x. Haga que el color de la linea dependa de la columna
creada en el inciso 6.1

6.3 Utilice la función labs para dar al eje x y al eje y una
estética a las etiquetas.

6.4 Imprima la gráfica y concluya
7 ¿Más lavado de manos, menos muertes?
Nuevamente, las estadísticas muestran que lavarse las manos tuvo un
efecto enorme. ¿Cuánto redujo la proporción mensual de muertes en
promedio?
7.1 Tome de referencia la columna que se agregó en el inciso 6.1 y
utilice la función groub_by para crear un agrupamiento.
monthly <- deaths_clinic1 %>%
group_by(handwashing_started, year(date), month(date)) %>%
summarise(mean_proportion_deaths = mean(proportion_deaths))
`summarise()` has grouped output by 'handwashing_started', 'year(date)'. You can override using the `.groups`
argument.
7.2 En continuidad al inciso anterior, aplique summarise para
calcular el promedio de la proporción de muertes antes y después de que
se impusiera el lavado de manos. Tome de referencia la variable con la
proporción (muertes/nacimientos).
7.3 Asigne el resultado a una nueva variable e imprímala.
7.4 Utlice ggplot para crear un boxplot que tome de referencia la
columna creada en el inciso 6.1 (eje x) versus la variable de proporción
(muertes/nacimientos).

7.5 Imprima la gráfica y concluya en función de los incisos 7.3 y
7.4.

8 Análisis estadístico de los datos de lavado de manos
¡Redujo la proporción de muertes en alrededor de 8 puntos
porcentuales! Del 10% en promedio antes del lavado de manos a solo el 2%
cuando se hizo cumplir el lavado de manos (que sigue siendo un número
alto según los estándares modernos). Para tener una idea de la
incertidumbre en torno a cuánto se reduce la mortalidad por lavarse las
manos, podríamos observar un intervalo de confianza (aquí calculado
mediante una prueba t).
Utilice la función t.test para calcular un intervalo de confianza del
95%. Los dos grupos que tenemos son proporción mensual de muertes antes
y después de que comenzara el lavado de manos. Tome de referencia la
columna con la proporción (muertes/nacimientos) y la columna creada en
el inciso 6.1.
t.test(monthly$mean_proportion_deaths ~ monthly$handwashing_started)
Welch Two Sample t-test
data: monthly$mean_proportion_deaths by monthly$handwashing_started
t = 6.7105, df = 84.198, p-value = 2.114e-09
alternative hypothesis: true difference in means between group FALSE and group TRUE is not equal to 0
95 percent confidence interval:
0.05290915 0.09747238
sample estimates:
mean in group FALSE mean in group TRUE
0.10691840 0.03172764
Interprete los datos resultantes y proporcione una conclusión.
9 Análisis estadístico propio
9.1 Aplique funciones como filter, count, select o visualizaciones
de tipo histograma o gráfica de puntos, que le permitan descubrir
comportamientos o tendencias en los datos. No se limite a estas
sugerencia, puede aplciar cualquier otro tipo de función.

9.2 Para cada análisis estadístico que proporcione concluya en
función de los resultados obtenidos.

LS0tDQp0aXRsZTogIlByb3llY3RvIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQpuYW1lOiBKdWFuIENhcmxvcyBTb2xsb3kgWGljw7NuDQpjb3Vyc2U6IEZ1bmRhbWVudG9zIGRlIHByb2dyYW1hY2nDs24geSBzY3JpcHRpbmcNCmRhdGU6IDA4LTA3LTIwMjQNCi0tLQ0KDQojIDEuIENvbm9jaWVuZG8gbG9zIGRhdG9zDQoNCiMjIDEuMSBDYXJndWUgZWwgcGFxdWV0ZSB0aWR5dmVyc2UNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkNCmBgYA0KDQojIyAxLjIgTGVhIGVsIGFyY2hpdm8gZGVhdGhfaGFuZHdhc2hpbmcuY3N2IHVzYW5kbyByZWFkX2NzdiB5IGFzw61nbmVsbyBhIHVuYSB2YXJpYWJsZS4NCmBgYHtyfQ0KZGVhdGhzX2hhbmR3YXNoaW5nIDwtIHJlYWRfY3N2KCJkZWF0aHNfaGFuZHdhc2hpbmcuY3N2IikNCmBgYA0KIyMgMS4zIEltcHJpbWEgbGEgdmFyaWFibGUgZGVsIGluY2lzbyAxLjINCmBgYHtyfQ0KZGVhdGhzX2hhbmR3YXNoaW5nDQpgYGANCiMgMiBFbCBhbGFybWFudGUgbsO6bWVybyBkZSBtdWVydGVzDQpMYSB0YWJsYSBhbnRlcmlvciBtdWVzdHJhIGVsIG7Dum1lcm8gZGUgbXVqZXJlcyBxdWUgZGllcm9uIGEgbHV6IGR1cmFudGUgbG9zIGHDsW9zIDE4NDEgYSAxODQ2IGVuIHVuYSBjaXVkYWQgYWwgbm9yZXN0ZSBkZSBBdXN0cmlhLCBlbiBkb3MgY2zDrW5pY2FzIGVuIHBhcnRpY3VsYXIuIE5vdGFyw6EgcXVlIGRhciBhIGx1eiBlcmEgbXV5IHBlbGlncm9zbzsgdW4gbsO6bWVybyBhbGFybWFudGUgZGUgbXVqZXJlcyBtdXJpw7MgY29tbyByZXN1bHRhZG8gZGVsIHBhcnRvLiBWZW1vcyBlc3RvIGNvbiBtYXlvciBjbGFyaWRhZCBzaSBvYnNlcnZhbW9zIGxhIHByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMgY29uIHJlc3BlY3RvIGFsIG7Dum1lcm8gZGUgbXVqZXJlcyBxdWUgZGllcm9uIGEgbHV6Lg0KDQojIyAyLjEgVXNlIG11dGF0ZSBwYXJhIGFncmVnYXIgdW5hIG51ZXZhIGNvbHVtbmEgcXVlIHNlIGNhbGN1bGFyw6EgY29tbyBsYSBwcm9wb3JjacOzbiBkZSBtdWVydGVzIHBvciBuw7ptZXJvIGRlIG5hY2ltaWVudG9zLg0KYGBge3J9DQpkZWF0aHNfaGFuZHdhc2hpbmcgPC0gZGVhdGhzX2hhbmR3YXNoaW5nICU+JQ0KICBtdXRhdGUocHJvcG9ydGlvbl9kZWF0aHMgPSBkZWF0aHMgLyBiaXJ0aHMpDQpgYGANCg0KIyMgMi4yIEltcHJpbWEgZWwgZGF0YXNldCBjb24gbGFudWV2YSB2YXJpYWJsZS4NCmBgYHtyfQ0KZGVhdGhzX2hhbmR3YXNoaW5nDQpgYGANCiMgMyBNdWVydGUgZW4gbGFzIGNsw61uaWNhcw0KU2kgYWhvcmEgZ3JhZmljYW1vcyBsYSBwcm9wb3JjacOzbiBkZSBtdWVydGVzIGVuIGxhIGNsw61uaWNhIDEgY29tbyBlbiBsYSBjbMOtbmljYSAyLCB2ZXJlbW9zIHVuIHBhdHLDs24gY3VyaW9zby4NCg0KIyMgMy4xIFV0aWxpY2UgZ2dwbG90IHBhcmEgaGFjZXIgdW5hIGdyw6FmaWNhIGxpbmVhbC4gVG9tZSBkZSByZWZlcmVuY2lhIGxhIGNvbHVtbmEgY3JlYWRhIGVuIGVsIGluY2lzbyAyLjEgKGVqZSkgdmVyc3VzIGxhIHZhcmlhYmxlIHllYXIgKGVqZSB4KS4NCmBgYHtyfQ0KZ2dwbG90KGRlYXRoc19oYW5kd2FzaGluZywgYWVzKHggPSB5ZWFyLCB5ID0gcHJvcG9ydGlvbl9kZWF0aHMpKSArDQogIGdlb21fbGluZSgpDQpgYGANCiMjIDMuMiBVdGlsaWNlIGxhIHZhcmlhYmxlIGNsaW5pYyBwYXJhIGRlZmluaXIgdW4gY29sb3IgZGlzdGludG8gZW4gbGEgZXN0w6l0aWNhIGRlIGxhIGdyw6FmaWNhLg0KYGBge3J9DQpnZ3Bsb3QoZGVhdGhzX2hhbmR3YXNoaW5nLCBhZXMoeCA9IHllYXIsIHkgPSBwcm9wb3J0aW9uX2RlYXRocywgY29sb3IgPSBjbGluaWMpKSArDQogIGdlb21fbGluZSgpDQpgYGANCiMjIDMuMyBQb3Igw7psdGltbywgaW1wcmltYSBsYSBncsOhZmljYSB5IGV4cG9uZ2Egc3UgcHVudG8gZGUgdmlzdGEuDQpgYGB7cn0NCmdncGxvdGx5KGdncGxvdChkZWF0aHNfaGFuZHdhc2hpbmcsIGFlcyh4ID0geWVhciwgeSA9IHByb3BvcnRpb25fZGVhdGhzLCBjb2xvciA9IGNsaW5pYykpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBsYWJzKHRpdGxlID0gIlByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMgZW4gbGFzIGNsw61uaWNhcyAxIHkgMiIsDQogICAgICAgeCA9ICJBw7FvIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMiKQ0KICAgICkNCmBgYA0KDQojIDQgQ29taWVuemEgZWwgbGF2YWRvIGRlIG1hbm9zDQoNCsK/UG9yIHF1w6kgbGEgcHJvcG9yY2nDs24gZGUgbXVlcnRlcyBlcyBtdWNobyBtw6FzIGFsdGEgZW4gbGEgQ2zDrW5pY2EgMT8gDQpMYSDDum5pY2EgZGlmZXJlbmNpYSBlbiBhbWJhcyBjbMOtbmljYXMgZXJhIHF1ZSBtdWNob3MgZXN0dWRpYW50ZXMgZGUgbWVkaWNpbmEgdHJhYmFqYWJhbiBlbiBsYSBDbMOtbmljYSAxLCBtaWVudHJhcyBxdWUgZW4gbGEgQ2zDrW5pY2EgMiBubyBoYWLDrWEgdGFudG9zLiANCk90cm8gZGF0byBpbnRlcmVzYW50ZSBlcyBxdWUgbG9zIG3DqWRpY29zIHF1ZSBhdGVuZMOtYW4gcGFydG9zIHNvbG8gc2UgZW5jYXJnYWJhbiBkZSBlc2EgZnVuY2nDs24sIG1pZW50cmFzIHF1ZSBsb3MgZXN0dWRpYW50ZXMgdGFtYmnDqW4gcGFzYWJhbiB0aWVtcG8gZW4gbGFzIHNhbGFzIGRlIGF1dG9wc2lhcyBleGFtaW5hbmRvIGNhZMOhdmVyZXMuDQoNClNlIGVtcGV6w7MgYSBzb3NwZWNoYXIgcXVlIGFsZ28gZW4gbG9zIGNhZMOhdmVyZXMsIHByb3BhZ2FkbyBkZSBsYXMgbWFub3MgZGUgbG9zIGVzdHVkaWFudGVzIGRlIG1lZGljaW5hLCBjYXVzYWJhIGxhIGVuZmVybWVkYWQuIA0KRW50b25jZXMsIGVuIHVuIGludGVudG8gZGVzZXNwZXJhZG8gcG9yIGRldGVuZXIgbGFzIGFsdGFzIHRhc2FzIGRlIG1vcnRhbGlkYWQsIHNlIGRlY3JldMOzOiDCoUzDoXZlc2UgbGFzIG1hbm9zIGVuIHRvZG8gbW9tZW50byENCg0KIyMgNC4xIENhcmd1ZSBsb3MgZGF0b3MgbWVuc3VhbGVzIGRlIGxhIENsw61uaWNhIDEgcGFyYSB2ZXIgc2kgZWwgbGF2YWRvIGRlIG1hbm9zIHR1dm8gYWxnw7puIGVmZWN0bywgcGFyYSBlc3RvIGxlYSBlbCBhcmNoaXZvIGRlYXRoc19jbGluaWMxLmNzdiB5IGFzw61nbmVsbyBhIHVuYSBudWV2YSB2YXJpYWJsZS4NCmBgYHtyfQ0KZGVhdGhzX2NsaW5pYzEgPC0gcmVhZF9jc3YoImRlYXRoc19jbGluaWNfMS5jc3YiKQ0KYGBgDQoNCiMjIDQuMiBVdGlsaWNlIGdncGxvdCBwYXJhIGhhY2VyIHVuYSBncsOhZmljYSBsaW5lYWwuIExhIGdyw6FmaWNhIHRlbmRyw6EgbGEgY2FyYWN0ZXLDrXN0aWNhIGRlIHNlciBkdWFsIChkb3MgZWplcyBZKS4gUGFyYSBlbCBlamUgWCBzZSB1dGlsaXphcsOhIGxhIHZhcmlhYmxlIGRhdGUgeSBwYXJhIFkxIHkgWTIsIHNlcsOhbiBiaXJ0aHMgeSBkZWF0aHMgcmVzcGVjdGl2YW1lbnRlLg0KYGBge3J9DQpnZ3Bsb3QoZGVhdGhzX2NsaW5pYzEsIGFlcyh4ID0gZGF0ZSkpICsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gYmlydGhzLCBjb2xvciA9ICJOYWNpbWllbnRvcyIpKSArDQogIGdlb21fbGluZShhZXMoeSA9IGRlYXRocywgY29sb3IgPSAiTXVlcnRlcyIpKSArDQogIHNjYWxlX3lfY29udGludW91cyhzZWMuYXhpcyA9IHNlY19heGlzKH4gLiAqIDAuMSwgbmFtZSA9ICJNdWVydGVzIikpDQpgYGANCiMjIDQuMyBVdGlsaWNlIGxhIGZ1bmNpb24gc2NhbGVfeV9jb250aW51b3VzIHBhcmEgYWdyZWdhciB1biB0w610dWxvIGEgY2FkYSBlamUgWS4NCmBgYHtyfQ0KZ2dwbG90KGRlYXRoc19jbGluaWMxLCBhZXMoeCA9IGRhdGUpKSArDQogIGdlb21fbGluZShhZXMoeSA9IGJpcnRocywgY29sb3IgPSAiTmFjaW1pZW50b3MiKSkgKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBkZWF0aHMsIGNvbG9yID0gIk11ZXJ0ZXMiKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJOYWNpbWllbnRvcyIsIHNlYy5heGlzID0gc2VjX2F4aXMofiAuICogMC4xLCBuYW1lID0gIk11ZXJ0ZXMiKSkNCmBgYA0KIyMgNC40IEFncmVndWUgdW4gdMOtdHVsbyBhbCBlamUgWCB5IHVuIHTDrXR1bG8gZ2VuZXJhbCBhIHRvZGEgbGEgZ3LDoWZpY2EuDQoNCmBgYHtyfQ0KZ2dwbG90KGRlYXRoc19jbGluaWMxLCBhZXMoeCA9IGRhdGUpKSArDQogIGdlb21fbGluZShhZXMoeSA9IGJpcnRocywgY29sb3IgPSAiTmFjaW1pZW50b3MiKSkgKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBkZWF0aHMsIGNvbG9yID0gIk11ZXJ0ZXMiKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJOYWNpbWllbnRvcyIsIHNlYy5heGlzID0gc2VjX2F4aXMofiAuICogMC4xLCBuYW1lID0gIk11ZXJ0ZXMiKSkgKw0KICBsYWJzKHRpdGxlID0gIk5hY2ltaWVudG9zIHkgbXVlcnRlcyBlbiBsYSBDbMOtbmljYSAxIiwNCiAgICAgICB4ID0gIkZlY2hhIikNCmBgYA0KIyMgNC41IEVzdGFibGV6Y2EgY29sb3IgdmVyZGUgYWwgY29tcG9ydGFtaWVudG8gZGUgbGEgdmFyaWFibGUgYmlydGhzIHkgbmFyYW5qYSBwYXJhIGRlYXRocy4gDQpgYGB7cn0NCmdncGxvdChkZWF0aHNfY2xpbmljMSwgYWVzKHggPSBkYXRlKSkgKw0KICBnZW9tX2xpbmUoYWVzKHkgPSBiaXJ0aHMsIGNvbG9yID0gIk5hY2ltaWVudG9zIikpICsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gZGVhdGhzLCBjb2xvciA9ICJNdWVydGVzIikpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiTmFjaW1pZW50b3MiLCBzZWMuYXhpcyA9IHNlY19heGlzKH4gLiAqIDAuMSwgbmFtZSA9ICJNdWVydGVzIikpICsNCiAgbGFicyh0aXRsZSA9ICJOYWNpbWllbnRvcyB5IG11ZXJ0ZXMgZW4gbGEgQ2zDrW5pY2EgMSIsDQogICAgICAgeCA9ICJGZWNoYSIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIk5hY2ltaWVudG9zIiA9ICJncmVlbiIsICJNdWVydGVzIiA9ICJvcmFuZ2UiKSkNCmBgYA0KIyMgNC42IEltcHJpbWEgbGEgZ3LDoWZpY2EgcmVzdWx0YW50ZS4NCkltcHJpbWlyIGxhIGdyYWZpY2EgY29uIHBsb3RseQ0KYGBge3J9DQpnZ3Bsb3RseShnZ3Bsb3QoZGVhdGhzX2NsaW5pYzEsIGFlcyh4ID0gZGF0ZSkpICsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gYmlydGhzLCBjb2xvciA9ICJOYWNpbWllbnRvcyIpKSArDQogIGdlb21fbGluZShhZXMoeSA9IGRlYXRocywgY29sb3IgPSAiTXVlcnRlcyIpKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIk5hY2ltaWVudG9zIiwgc2VjLmF4aXMgPSBzZWNfYXhpcyh+IC4gKiAwLjEsIG5hbWUgPSAiTXVlcnRlcyIpKSArDQogIGxhYnModGl0bGUgPSAiTmFjaW1pZW50b3MgeSBtdWVydGVzIGVuIGxhIENsw61uaWNhIDEiLA0KICAgICAgIHggPSAiRmVjaGEiKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJOYWNpbWllbnRvcyIgPSAiZ3JlZW4iLCAiTXVlcnRlcyIgPSAib3JhbmdlIikpDQopDQpgYGANCg0KIyMgNC43IENvbnN0cnV5YSB1bmEgb3BpbmnDs24gY29uIGVsIHJlc3VsdGFkbyBkZSBsYSBncsOhZmljYS4NCg0KIyA1IEVsIGVmZWN0byBkZWwgbGF2YWRvIGRlIG1hbm9zLiBBbmFsaWNlbW9zIGxhIHByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMgYSBsbyBsYXJnbyBkZWwgdGllbXBvLg0KDQpQZXJzcGVjdGl2YSBsaW5lYWwNCiMjIDUuMSBBZ3JlZ3VlIHVuYSBudWV2YSBjb2x1bW5hIGEgbGEgdmFyaWFibGUgY3JlYWRhIGVuIGVsIGluY2lzbyA0LjEuIEVzdGEgbnVldmEgY29sdW1uYSBzZSBjYWxjdWxhcsOhIGNvbW8gbGEgcHJvcG9yY2nDs24gZGUgbXVlcnRlcyBwb3IgbsO6bWVybyBkZSBuYWNpbWllbnRvcy4gR3VhcmRlIGVzdGUgY2FtYmlvIGVuIHVuYSBudWV2YSB2YXJpYWJsZS4NCmBgYHtyfQ0KZGVhdGhzX2NsaW5pYzEgPC0gZGVhdGhzX2NsaW5pYzEgJT4lDQogIG11dGF0ZShwcm9wb3J0aW9uX2RlYXRocyA9IGRlYXRocyAvIGJpcnRocykNCmBgYA0KDQoNCiMjIDUuMiBJbXByaW1hIGxhcyBwcmltZXJhcyBmaWxhcyBkZWwgZGF0YWZyYW1lIGRlbCBwdW50byBhbnRlcmlvci4gSGFnYSB1c28gZGUgbGEgZnVuY2nDs24gaGVhZCgpDQpgYGB7cn0NCmhlYWQoZGVhdGhzX2NsaW5pYzEpDQpgYGANCg0KIyMgNS4zIEVsYWJvcmUgdW5hIGdyw6FmaWNhIGxpbmVhbCB1dGlsaXphbmRvIGxhIGNvbHVtbmEgY3JlYWRhIGVuIGVsIGluY2ljbyA1LjEgKGVqZSB5KSB2ZXJzdXMgbGEgY29sdW5tYSBkYXRlIChlamUgeCkuDQoNCmBgYHtyfQ0KZ2dwbG90KGRlYXRoc19jbGluaWMxLCBhZXMoeCA9IGRhdGUsIHkgPSBwcm9wb3J0aW9uX2RlYXRocykpICsNCiAgZ2VvbV9saW5lKCkNCmBgYA0KDQojIyA1LjQgVXRpbGljZSBsYSBmdW5jaW9uIGxhYnMgcGFyYSBkYXIgYWwgZWplIHggeSBhbCBlamUgeSB1bmEgZXN0w6l0aWNhIGEgbGFzIGV0aXF1ZXRhcy4NCmBgYHtyfQ0KZ2dwbG90KGRlYXRoc19jbGluaWMxLCBhZXMoeCA9IGRhdGUsIHkgPSBwcm9wb3J0aW9uX2RlYXRocykpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBsYWJzKHRpdGxlID0gIlByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMgZW4gbGEgQ2zDrW5pY2EgMSIsDQogICAgICAgeCA9ICJGZWNoYSIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiBkZSBtdWVydGVzIikNCmBgYA0KIyMgNS41IFBvciDDumx0aW1vLCBpbXByaW1hIGxhIGdyw6FmaWNhIHkgY29uY2x1eWEuDQpgYGB7cn0NCmdncGxvdGx5KGdncGxvdChkZWF0aHNfY2xpbmljMSwgYWVzKHggPSBkYXRlLCB5ID0gcHJvcG9ydGlvbl9kZWF0aHMpKSArDQogIGdlb21fbGluZSgpICsNCiAgbGFicyh0aXRsZSA9ICJQcm9wb3JjacOzbiBkZSBtdWVydGVzIGVuIGxhIENsw61uaWNhIDEiLA0KICAgICAgIHggPSAiRmVjaGEiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24gZGUgbXVlcnRlcyIpDQopDQpgYGANClBlcnNwZWN0aXZhIGRlIGJhcnJhcw0KDQojIyA1LjYgVXNlIGdyb3VwX2J5IHBhcmEgbGEgdmFyaWFibGUgeWVhciB5IHN1bW1hcmlzZSBwYXJhIGVuY29udHJhciBsYSBtZWRpYSB0b21hbmRvIGRlIHJlZmVyZW5jaWEgbGEgdmFyaWFibGUgZGVsIGluY2lzbyA1LjEuIEd1YXJkZSBlbCByZXN1bHRhZG8gZW4gdW5hIG51ZXZhIHZhcmlhYmxlLg0KDQpgYGB7cn0NCmRlYXRoc19jbGluaWMxJHllYXIgPC0geWVhcihkZWF0aHNfY2xpbmljMSRkYXRlKQ0KZGVhdGhzX2NsaW5pYzFfeWVhcmx5IDwtIGRlYXRoc19jbGluaWMxICU+JQ0KICBncm91cF9ieSh5ZWFyKSAlPiUNCiAgc3VtbWFyaXNlKG1lYW5fcHJvcG9ydGlvbl9kZWF0aHMgPSBtZWFuKHByb3BvcnRpb25fZGVhdGhzKSkNCmBgYA0KDQojIyA1LjcgVXRpbGljZSBsYSB2YXJpYWJsZSBjcmVhZGEgZW4gZWwgaW5jaXNvIGFudGVyaW9yIHBhcmEgY3JlYXIgdW4gZ3LDoWZpY28gZGUgYmFycmFzIHF1ZSBtdWVzdHJlIGxhIG1lZGlhIGVuIGNhZGEgYcOxby4NCg0KYGBge3J9DQpnZ3Bsb3QoZGVhdGhzX2NsaW5pYzFfeWVhcmx5LCBhZXMoeCA9IHllYXIsIHkgPSBtZWFuX3Byb3BvcnRpb25fZGVhdGhzKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikNCmBgYA0KDQojIyA1LjggUG9yIMO6bHRpbW8sIGltcHJpbWEgbGEgZ3JhZmljYSB5IGNvbmNsdXlhLg0KZ3JhZmljYXIgY29uIHBsb3RseQ0KYGBge3J9DQpnZ3Bsb3RseShnZ3Bsb3QoZGVhdGhzX2NsaW5pYzFfeWVhcmx5LCBhZXMoeCA9IHllYXIsIHkgPSBtZWFuX3Byb3BvcnRpb25fZGVhdGhzKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBsYWJzKHRpdGxlID0gIlByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMgcHJvbWVkaW8gZW4gbGEgQ2zDrW5pY2EgMSIsDQogICAgICAgeCA9ICJBw7FvIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMgcHJvbWVkaW8iKQ0KKQ0KYGBgDQojIExvcyByZXN1bHRhZG9zIGRlbCBsYXZhZG8gZGUgbWFub3MNCg0KQSBwYXJ0aXIgZGVsIGHDsW8gMTg0NyBsYSBwcm9wb3JjacOzbiBkZSBtdWVydGVzIHNlIHJlZHVjZSBkcsOhc3RpY2FtZW50ZSB5LCBzw60sIGZ1ZSBlbnRvbmNlcyBjdWFuZG8gc2UgaGl6byBvYmxpZ2F0b3JpbyBlbCBsYXZhZG8gZGUgbWFub3MuDQpFbCBlZmVjdG8gZGVsIGxhdmFkbyBkZSBtYW5vcyBzZSBoYWNlIGHDum4gbcOhcyBjbGFybyBzaSBsbyByZXNhbHRhbW9zIGVuIGVsIGdyw6FmaWNvLg0KDQojIDYuMSBBZ3JlZ3VlIHVuYSBjb2x1bW5hIGEgbGEgdmFyaWFibGUgY3JlYWRhIGVuIGVsIGluY2lzbyA1LjEsIGVzdMOhIGNvbHVtbmEgc2Vyw6EgVFJVRSBhIHBhcnRpciBkZWwgYcOxbyBlbiBxdWUgc2UgaW1wdXNvIGVsIGxhdmFkbyBkZSBtYW5vcyB5IEZBTFNFIHBhcmEgYcOxb3MgYW50ZXJpb3Jlcy4gR3VhcmRlIGVzdGUgY2FtYmlvIGVuIHVuYSBudWV2YSB2YXJpYWJsZS4NCmBgYHtyfQ0KZGVhdGhzX2NsaW5pYzEgPC0gZGVhdGhzX2NsaW5pYzEgJT4lDQogIG11dGF0ZShoYW5kd2FzaGluZ19zdGFydGVkID0gZGF0ZSA+PSAiMTg0Ny0wMS0wMSIpDQpgYGANCg0KIyMgNi4yIENvbnN0cnV5YSB1bmEgZ3LDoWZpY2EgbGluZWFsIHRvbWFuZG8gZGUgcmVmZXJlbmNpYSBsYSB2YXJpYWJsZSBjb24gbGEgcHJvcG9yY2nDs24gKG11ZXJ0ZXMvbmFjaW1pZW50b3MpIHBhcmEgZWwgZWplIHkgdmVyc3VzIGxhIHZhcmlhYmxlIGRhdGUgcGFyYSBlbCBlamUgeC4gSGFnYSBxdWUgZWwgY29sb3IgZGUgbGEgbGluZWEgZGVwZW5kYSBkZSBsYSBjb2x1bW5hIGNyZWFkYSBlbiBlbCBpbmNpc28gNi4xDQpgYGB7cn0NCmdncGxvdChkZWF0aHNfY2xpbmljMSwgYWVzKHggPSBkYXRlLCB5ID0gcHJvcG9ydGlvbl9kZWF0aHMsIGNvbG9yID0gaGFuZHdhc2hpbmdfc3RhcnRlZCkpICsNCiAgZ2VvbV9saW5lKCkNCmBgYA0KIyMgNi4zIFV0aWxpY2UgbGEgZnVuY2nDs24gbGFicyBwYXJhIGRhciBhbCBlamUgeCB5IGFsIGVqZSB5IHVuYSBlc3TDqXRpY2EgYSBsYXMgZXRpcXVldGFzLg0KYGBge3J9DQpnZ3Bsb3QoZGVhdGhzX2NsaW5pYzEsIGFlcyh4ID0gZGF0ZSwgeSA9IHByb3BvcnRpb25fZGVhdGhzLCBjb2xvciA9IGhhbmR3YXNoaW5nX3N0YXJ0ZWQpKSArDQogIGdlb21fbGluZSgpICsNCiAgbGFicyh0aXRsZSA9ICJQcm9wb3JjacOzbiBkZSBtdWVydGVzIGVuIGxhIENsw61uaWNhIDEiLA0KICAgICAgIHggPSAiRmVjaGEiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24gZGUgbXVlcnRlcyIpDQpgYGANCiMjIDYuNCBJbXByaW1hIGxhIGdyw6FmaWNhIHkgY29uY2x1eWENCmBgYHtyfQ0KZ2dwbG90bHkoZ2dwbG90KGRlYXRoc19jbGluaWMxLCBhZXMoeCA9IGRhdGUsIHkgPSBwcm9wb3J0aW9uX2RlYXRocywgY29sb3IgPSBoYW5kd2FzaGluZ19zdGFydGVkKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGxhYnModGl0bGUgPSAiUHJvcG9yY2nDs24gZGUgbXVlcnRlcyBlbiBsYSBDbMOtbmljYSAxIiwNCiAgICAgICB4ID0gIkZlY2hhIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMiKSkNCmBgYA0KIyA3IMK/TcOhcyBsYXZhZG8gZGUgbWFub3MsIG1lbm9zIG11ZXJ0ZXM/DQoNCk51ZXZhbWVudGUsIGxhcyBlc3RhZMOtc3RpY2FzIG11ZXN0cmFuIHF1ZSBsYXZhcnNlIGxhcyBtYW5vcyB0dXZvIHVuIGVmZWN0byBlbm9ybWUuIMK/Q3XDoW50byByZWR1am8gbGEgcHJvcG9yY2nDs24gbWVuc3VhbCBkZSBtdWVydGVzIGVuIHByb21lZGlvPw0KDQojIyA3LjEgVG9tZSBkZSByZWZlcmVuY2lhIGxhIGNvbHVtbmEgcXVlIHNlIGFncmVnw7MgZW4gZWwgaW5jaXNvIDYuMSB5IHV0aWxpY2UgbGEgZnVuY2nDs24gZ3JvdWJfYnkgcGFyYSBjcmVhciB1biBhZ3J1cGFtaWVudG8uDQoNCmBgYHtyfQ0KZGVhdGhzX2NsaW5pYzEkbW9udGggPC0gbW9udGgoZGVhdGhzX2NsaW5pYzEkZGF0ZSkNCm1vbnRobHkgPC0gZGVhdGhzX2NsaW5pYzEgJT4lDQogIGdyb3VwX2J5KGhhbmR3YXNoaW5nX3N0YXJ0ZWQsIHllYXIoZGF0ZSksIG1vbnRoKGRhdGUpKSAlPiUNCiAgc3VtbWFyaXNlKG1lYW5fcHJvcG9ydGlvbl9kZWF0aHMgPSBtZWFuKHByb3BvcnRpb25fZGVhdGhzKSkNCmBgYA0KIyMgNy4yIEVuIGNvbnRpbnVpZGFkIGFsIGluY2lzbyBhbnRlcmlvciwgYXBsaXF1ZSBzdW1tYXJpc2UgcGFyYSBjYWxjdWxhciBlbCBwcm9tZWRpbyBkZSBsYSBwcm9wb3JjacOzbiBkZSBtdWVydGVzIGFudGVzIHkgZGVzcHXDqXMgZGUgcXVlIHNlIGltcHVzaWVyYSBlbCBsYXZhZG8gZGUgbWFub3MuIFRvbWUgZGUgcmVmZXJlbmNpYSBsYSB2YXJpYWJsZSBjb24gbGEgcHJvcG9yY2nDs24gKG11ZXJ0ZXMvbmFjaW1pZW50b3MpLg0KYGBge3J9DQptb250aGx5X3N1bW1hcnkgPC0gbW9udGhseSAlPiUNCiAgZ3JvdXBfYnkoaGFuZHdhc2hpbmdfc3RhcnRlZCkgJT4lDQogIHN1bW1hcmlzZShtZWFuX3Byb3BvcnRpb25fZGVhdGhzID0gbWVhbihtZWFuX3Byb3BvcnRpb25fZGVhdGhzKSkNCmBgYA0KDQojIyA3LjMgQXNpZ25lIGVsIHJlc3VsdGFkbyBhIHVuYSBudWV2YSB2YXJpYWJsZSBlIGltcHLDrW1hbGEuIA0KDQpgYGB7cn0NCm1vbnRobHlfc3VtbWFyeQ0KYGBgDQojIyA3LjQgVXRsaWNlIGdncGxvdCBwYXJhIGNyZWFyIHVuIGJveHBsb3QgcXVlIHRvbWUgZGUgcmVmZXJlbmNpYSBsYSBjb2x1bW5hIGNyZWFkYSBlbiBlbCBpbmNpc28gNi4xIChlamUgeCkgdmVyc3VzIGxhIHZhcmlhYmxlIGRlIHByb3BvcmNpw7NuIChtdWVydGVzL25hY2ltaWVudG9zKS4NCmBgYHtyfQ0KZ2dwbG90KG1vbnRobHksIGFlcyh4ID0gaGFuZHdhc2hpbmdfc3RhcnRlZCwgeSA9IG1lYW5fcHJvcG9ydGlvbl9kZWF0aHMpKSArDQogIGdlb21fYm94cGxvdCgpDQpgYGANCg0KIyMgNy41IEltcHJpbWEgbGEgZ3LDoWZpY2EgeSBjb25jbHV5YSBlbiBmdW5jacOzbiBkZSBsb3MgaW5jaXNvcyA3LjMgeSA3LjQuDQpgYGB7cn0NCmdncGxvdChtb250aGx5LCBhZXMoeCA9IGhhbmR3YXNoaW5nX3N0YXJ0ZWQsIHkgPSBtZWFuX3Byb3BvcnRpb25fZGVhdGhzKSkgKw0KICBnZW9tX2JveHBsb3QoKQ0KYGBgDQojIDggQW7DoWxpc2lzIGVzdGFkw61zdGljbyBkZSBsb3MgZGF0b3MgZGUgbGF2YWRvIGRlIG1hbm9zDQoNCg0KwqFSZWR1am8gbGEgcHJvcG9yY2nDs24gZGUgbXVlcnRlcyBlbiBhbHJlZGVkb3IgZGUgOCBwdW50b3MgcG9yY2VudHVhbGVzISBEZWwgMTAlIGVuIHByb21lZGlvIGFudGVzIGRlbCBsYXZhZG8gZGUgbWFub3MgYSBzb2xvIGVsIDIlIGN1YW5kbyBzZSBoaXpvIGN1bXBsaXIgZWwgbGF2YWRvIGRlIG1hbm9zIChxdWUgc2lndWUgc2llbmRvIHVuIG7Dum1lcm8gYWx0byBzZWfDum4gbG9zIGVzdMOhbmRhcmVzIG1vZGVybm9zKS4gUGFyYSB0ZW5lciB1bmEgaWRlYSBkZSBsYSBpbmNlcnRpZHVtYnJlIGVuIHRvcm5vIGEgY3XDoW50byBzZSByZWR1Y2UgbGEgbW9ydGFsaWRhZCBwb3IgbGF2YXJzZSBsYXMgbWFub3MsIHBvZHLDrWFtb3Mgb2JzZXJ2YXIgdW4gaW50ZXJ2YWxvIGRlIGNvbmZpYW56YSAoYXF1w60gY2FsY3VsYWRvIG1lZGlhbnRlIHVuYSBwcnVlYmEgdCkuDQoNClV0aWxpY2UgbGEgZnVuY2nDs24gdC50ZXN0IHBhcmEgY2FsY3VsYXIgdW4gaW50ZXJ2YWxvIGRlIGNvbmZpYW56YSBkZWwgOTUlLiBMb3MgZG9zIGdydXBvcyBxdWUgdGVuZW1vcyBzb24gcHJvcG9yY2nDs24gbWVuc3VhbCBkZSBtdWVydGVzIGFudGVzIHkgZGVzcHXDqXMgZGUgcXVlIGNvbWVuemFyYSBlbCBsYXZhZG8gZGUgbWFub3MuIFRvbWUgZGUgcmVmZXJlbmNpYSBsYSBjb2x1bW5hIGNvbiBsYSBwcm9wb3JjacOzbiAobXVlcnRlcy9uYWNpbWllbnRvcykgeSBsYSBjb2x1bW5hIGNyZWFkYSBlbiBlbCBpbmNpc28gNi4xLg0KYGBge3J9DQp0LnRlc3QobW9udGhseSRtZWFuX3Byb3BvcnRpb25fZGVhdGhzIH4gbW9udGhseSRoYW5kd2FzaGluZ19zdGFydGVkKQ0KYGBgDQpJbnRlcnByZXRlIGxvcyBkYXRvcyByZXN1bHRhbnRlcyB5IHByb3BvcmNpb25lIHVuYSBjb25jbHVzacOzbi4NCg0KIyA5IEFuw6FsaXNpcyBlc3RhZMOtc3RpY28gcHJvcGlvDQoNCiMjIDkuMSBBcGxpcXVlIGZ1bmNpb25lcyBjb21vIGZpbHRlciwgY291bnQsIHNlbGVjdCBvIHZpc3VhbGl6YWNpb25lcyBkZSB0aXBvIGhpc3RvZ3JhbWEgbyBncsOhZmljYSBkZSBwdW50b3MsIHF1ZSBsZSBwZXJtaXRhbiBkZXNjdWJyaXIgY29tcG9ydGFtaWVudG9zIG8gdGVuZGVuY2lhcyBlbiBsb3MgZGF0b3MuIE5vIHNlIGxpbWl0ZSBhIGVzdGFzIHN1Z2VyZW5jaWEsIHB1ZWRlIGFwbGNpYXIgY3VhbHF1aWVyIG90cm8gdGlwbyBkZSBmdW5jacOzbi4NCmBgYHtyfQ0KZ2dwbG90KGRlYXRoc19jbGluaWMxLCBhZXMoeCA9IGRhdGUsIHkgPSBwcm9wb3J0aW9uX2RlYXRocywgY29sb3IgPSBoYW5kd2FzaGluZ19zdGFydGVkKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGxhYnModGl0bGUgPSAiUHJvcG9yY2nDs24gZGUgbXVlcnRlcyBlbiBsYSBDbMOtbmljYSAxIiwNCiAgICAgICB4ID0gIkZlY2hhIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMiKQ0KYGBgDQojIyA5LjIgUGFyYSBjYWRhIGFuw6FsaXNpcyBlc3RhZMOtc3RpY28gcXVlIHByb3BvcmNpb25lIGNvbmNsdXlhIGVuIGZ1bmNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcy4NCmBgYHtyfQ0KZ2dwbG90KGRlYXRoc19jbGluaWMxLCBhZXMoeCA9IGRhdGUsIHkgPSBwcm9wb3J0aW9uX2RlYXRocywgY29sb3IgPSBoYW5kd2FzaGluZ19zdGFydGVkKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGxhYnModGl0bGUgPSAiUHJvcG9yY2nDs24gZGUgbXVlcnRlcyBlbiBsYSBDbMOtbmljYSAxIiwNCiAgICAgICB4ID0gIkZlY2hhIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIGRlIG11ZXJ0ZXMiKQ0KYGBg